#ifndef _MEDIA_SYS_H_
#define _MEDIA_SYS_H_

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/ioctl.h>   //ioctl
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>    //映射mmap
#include <fcntl.h>
#include <unistd.h>
#include <time.h>
#include <stdbool.h>
#include <string.h>
#include <linux/input.h>  //触摸屏设备头文件
#include <linux/fb.h>     //lcd设备头文件
#include <pthread.h>      //多线程的


#define LCD_DEV_PATH            "/dev/fb0"                   //LCD设备路径
#define TOUCH_LCD_DEV_PATH      "/dev/input/event0"          //触摸屏设备路径
#define DZK_FILE_PATH           "/ascii.Dzk"                 //字体库
#define DZK_FILE_PATH2        "/123.Dzk"                 //字体库
#define LCD_PIXEL_SIZE          4                            //LCD像素点4个字节
#define BMP_PIXEL_SIZE          3                           //BMP像素点4个字节
#define DEFAULT_SEARCH_BMP_PATH "/pic"
#define PIC_FILE_TYPE           ".bmp"
#define DEFAULT_SEARCH_MP4_PATH "/video"
#define VIDEO_FILE_TYPE         ".mp4"


extern int time_up_down;
extern int tmp;

typedef struct media_sys_inf
{
      int lcd;                //LCD文件描述符
      int *mmap_start_poi;    //LCD 映射指针
      int lcd_w;              //LCD宽   
      int lcd_h;              //LCD高

      int dzk;                //字库
      int dzk_file_size;
      char * dzk_mmap_poi;

      int dzk2;
      int dzk_file_size2;
      char * dzk_mmap_poi2;

      unsigned int font_color;//字体颜色
      unsigned int broadground_color;//背景颜色
      
      int ts;                 //触摸屏文件描述符  
      int touch_x;            //触摸屏X坐标     
      int touch_y;            //触摸屏Y坐标  
      int key;

}MEDIA_STR,* MEDIA_POI;


typedef struct bmp_inf
{
      char bmp_path[256];
      
      struct bmp_inf * next;
      struct bmp_inf * prev;
}BMP_NODE , * BMP_LINK;


//给相册功能模块定义一个结构体
typedef struct album_inf
{
      BMP_LINK bmp_list_head;       //图片的链表头结点
      int photo_sum;                //相册图片的总个数 
      int photo_page_sum;           //页面总个数
}AI,*P_AI;

typedef struct MP4_inf
{
      char mp4_path[256];
      
      struct MP4_inf * next;
      struct MP4_inf * prev;
}MP4_NODE , * MP4_LINK;


//给视频功能模块定义一个结构体
typedef struct vibum_inf
{
      MP4_LINK mp4_list_head;       //视频的链表头结点
      int video_sum;                //视频的总个数 
      int video_page_sum;           //视频页面总个数
}VI,*P_VI;

typedef struct video_inf
{
      MEDIA_POI mp;
      P_VI p_vi;
      int mode;
}VIDEO_I,*P_VIDEO_I;


//给游戏功能模块定义一个结构体
typedef struct game_inf
{
      MEDIA_POI mp;
      int ball_switch;   //球开关
      int game_over;     //游戏结束
      int slider_x;      //滑块x
      int slider_size;   //滑块开关

}GAME_I,*P_GAME_I;

/***********************************commom.c********************************** */
MEDIA_POI Media_Sys_Init();//项目初始化  --- 硬件设备初始化
bool      Start(MEDIA_POI mp);//开始
bool      Media_Sys_Free(MEDIA_POI mp);//项目结束释放 --- 硬件设备结束释放
bool      Show_Ui(MEDIA_POI mp,const char * ui_pic_path);//画界面函数
bool      Get_Touch_Xy(MEDIA_POI mp,int mode);//获取触摸屏坐标
bool      Main_Touch_Ctrl(MEDIA_POI mp);//主界面触摸控制
bool      Lcd_Clean(MEDIA_POI mp,int color); //刷指定颜色全屏
bool      Ascii_Show(char * font,MEDIA_POI mp,int where_x,int where_y);//显示一个字符
bool      Ascii50_Show(char * font,MEDIA_POI mp,int where_x,int where_y);//显示一个50字符
bool      Sentence_Show(char * sentence,MEDIA_POI mp,int where_x,int where_y);//显示一句
bool      Sentence_Show_50(char * sentence,MEDIA_POI mp,int where_x,int where_y);//显示一句
bool      Show_Time(MEDIA_POI mp); // 时间显示
void      *pthread_time(void *arg);
bool      Lock_Screen(MEDIA_POI mp);//锁屏


/***********************************album.c********************************** */
bool      Album(MEDIA_POI mp); //相册总接口
P_AI      Album_Init(MEDIA_POI mp); //相册初始化接口   --- 创建图片链表的头结点，图片文件的目录检索
bool      Album_Free(P_AI p_ai); //相册结束释放接口
bool      Album_Touch_Ctrl(MEDIA_POI mp,P_AI p_ai);//相册界面触摸控制
BMP_LINK  Create_Bmp_Node(); //创建图片链表节点
bool      Bmp_File_Search(P_AI p_ai,MEDIA_POI mp); //bmp图片的检索 = 数量统计 图片链表的形成
bool      Add_Bmp_Node(P_AI p_ai,BMP_LINK new_node);  //尾插法添加图片链表节点
bool      Show_Page_Thumbnail(MEDIA_POI mp,P_AI p_ai,int page_num); //指定显示某一页的缩略图
bool      Show_One_Thumbnail(MEDIA_POI mp,const char * bmp_path, int zoomout,int bmp_x,int bmp_y);
bool      Show_Original_Drawing(int page_num,int n,MEDIA_POI mp,P_AI p_ai);//显示原图
bool      Del_photo(int page_num,int n,MEDIA_POI mp,P_AI p_ai);//删除图片
bool      close_photo_link(P_AI pa_i);//cuihui图片



/***********************************game.c********************************** */
bool      Game(MEDIA_POI mp);//游戏总接口
bool      Game_Touch_Ctrl(MEDIA_POI mp);//游戏界面触摸控制
bool      Game_Start(P_GAME_I gi);//游戏开始
bool      move_ball(P_GAME_I gi);//动球
bool      move_slider(P_GAME_I gi);//滑块动
void      *pthread_slider(void *arg);//滑块的移动多线程
void      *pthread_ball(void *arg);//球的移动多线程



/***********************************video.c********************************** */
bool vibum(MEDIA_POI mp); //视频总接口
P_VI Vlbum_Init(MEDIA_POI mp); //被sp总接口Album调用
MP4_LINK  Create_Mp4_Node();  //头结点
bool MP4_File_Search(P_VI p_vi); //MP4视频的检索
bool Add_Mp4_Node(P_VI p_vi,MP4_LINK new_node);  //头插法添加sp链表节点
bool Show_Page_Thumbnail_Vi(MEDIA_POI mp,P_VI p_vi,int page_num);//指定显示某一页的缩略图   200*120
bool Del_video(int page_num,int n,MEDIA_POI mp,P_VI p_vi);//删除sp
int Video(const char *video_path) ;
void *pthread_5(void *arg);
bool show_video(int page_num,int n,MEDIA_POI mp,P_VI p_vi);//显示视频 n是视频位置
bool Vlbum_Touch_Ctrl(MEDIA_POI mp,P_VI p_vi);//sp界面触摸控制
bool close_video_link(P_VI pv_i);//cuihui视频

#endif